import request from '@/utils/request'

/**
 * API 接口模块
 */

/**
 * 用户认证相关接口
 */

/**
 * 用户登录
 * @param {Object} data - 登录信息
 * @param {string} data.username - 用户名
 * @param {string} data.password - 密码
 * @returns {Promise} 登录结果
 */
export const login = (data) => {
  console.log('发送登录请求:', data)
  
  const jsonData = {
    username: data.username,
    passwordHash: data.password
  }
  
  return request({
    url: '/user/user/login',
    method: 'post',
    data: jsonData
  }).then(response => {
    if (response.code === 200 && response.data) {
      localStorage.setItem('userInfo', JSON.stringify(response.data.user))
      localStorage.setItem('cartId', response.data.cartId)
      localStorage.setItem('token', response.data.user.passwordHash)
    }
    return response
  })
}

/**
 * 用户注册
 * @param {Object} data - 注册信息
 * @param {string} data.username - 用户名
 * @param {string} data.password - 密码
 * @param {string} data.email - 邮箱
 * @param {string} data.phone - 手机号
 * @param {string} [data.role] - 用户角色，默认为 resident
 * @returns {Promise} 注册结果
 */
export const register = (data) => {
  console.log('发送注册请求:', data)
  return request({
    url: '/user/user/register',
    method: 'post',
    data: {
      username: data.username,
      passwordHash: data.password,
      email: data.email,
      phoneNumber: data.phone,
      role: data.role || 'resident'
    }
  }).then(response => response)
}

/**
 * 忘记密码
 * @param {Object} data - 重置密码信息
 * @param {string} data.username - 用户名
 * @param {string} data.email - 邮箱
 * @param {string} data.newPasswordHash - 新密码
 * @returns {Promise} 重置结果
 */
export const forgotPassword = (data) => {
  console.log('发送忘记密码请求:', data)
  return request({
    url: '/user/user/forget',
    method: 'post',
    data: {
      username: data.username,
      email: data.email,
      newPasswordHash: data.newPasswordHash
    }
  }).then(response => response)
}

/**
 * 退出登录
 * @returns {Promise} 退出结果
 */
export const logout = () => {
  console.log('发送退出登录请求')
  localStorage.removeItem('token')
  localStorage.removeItem('userInfo')
  localStorage.removeItem('cartId')
  return request({
    url: '/user/logout',
    method: 'post'
  }).then(response => response)
}

/**
 * 用户信息相关接口
 */

/**
 * 获取用户信息
 * @param {number} userId - 用户ID
 * @returns {Promise} 用户信息
 */
export const getUserInfo = (userId) => {
  return request({
    url: '/user/user/selectUser',
    method: 'post',
    data: {
      userId
    }
  })
}

/**
 * 商品相关接口
 */

/**
 * 获取商品列表
 * @returns {Promise} 商品列表
 */
export const getProducts = () => {
  return request({
    url: '/product/product/selectProduct',
    method: 'post'
  })
}

/**
 * 根据分类ID获取商品列表
 * @param {number} categoryId - 商品分类ID
 * @returns {Promise} 商品列表
 */
export const getProductsByCategoryId = (categoryId) => {
  return request({
    url: '/product/product/selectProductByCategoryId',
    method: 'post',
    data: { categoryId }
  })
}

/**
 * 获取商品分类
 * @returns {Promise} 商品分类列表
 */
export const getProductCategories = () => {
  return request({
    url: '/product/product/selectProductCategories',
    method: 'post'
  })
}

/**
 * 购物车相关接口
 */

/**
 * 获取购物车内容
 * @returns {Promise} 购物车内容
 */
export const getCartContent = () => {
  const userId = JSON.parse(localStorage.getItem('userInfo'))?.userId
  return request({
    url: '/cart/cart/content',
    method: 'post',
    data: { userId }
  })
}

/**
 * 添加商品到购物车
 * @param {number} productId - 商品ID
 * @param {number} quantity - 数量
 * @returns {Promise} 添加结果
 */
export const addToCartApi = (productId, quantity) => {
  const userId = JSON.parse(localStorage.getItem('userInfo'))?.userId
  return request({
    url: '/cart/cart/add',
    method: 'post',
    data: {
      userId,
      productId,
      quantity
    }
  })
}

/**
 * 清空购物车
 * @returns {Promise} 清空结果
 */
export const clearCartApi = () => {
  const userId = JSON.parse(localStorage.getItem('userInfo'))?.userId
  return request({
    url: '/cart/cart/deleteAll',
    method: 'post',
    data: { userId }
  })
}

/**
 * 更新购物车商品数量
 * @param {number} productId - 商品ID
 * @param {number} quantity - 数量
 * @returns {Promise} 更新结果
 */
export const updateCartQuantity = (productId, quantity) => {
  const userId = JSON.parse(localStorage.getItem('userInfo'))?.userId
  return request({
    url: '/cart/cart/update',
    method: 'post',
    data: {
      userId,
      productId,
      quantity
    }
  })
}

/**
 * 从购物车中删除商品
 * @param {number} productId - 商品ID
 * @returns {Promise} 删除结果
 */
export const deleteFromCart = (productId) => {
  const userId = JSON.parse(localStorage.getItem('userInfo'))?.userId
  return request({
    url: '/cart/cart/delete',
    method: 'post',
    data: {
      userId,
      productId
    }
  })
}

/**
 * 订单相关接口
 */

/**
 * 通过购物车创建订单
 * @param {number} cartId - 购物车ID
 * @param {Array} items - 订单商品列表
 * @returns {Promise} 创建结果
 */
export const createOrderFromCart = (cartId, items) => {
  const userId = JSON.parse(localStorage.getItem('userInfo'))?.userId
  return request({
    url: '/order/order/createOrder',
    method: 'post',
    data: {
      userId,
      cartId,
      items
    }
  })
}

/**
 * 直接创建订单
 * @param {Array} items - 订单商品列表
 * @returns {Promise} 创建结果
 */
export const createOrderDirect = (items) => {
  const userId = JSON.parse(localStorage.getItem('userInfo'))?.userId
  return request({
    url: '/order/order/directCreateOrder',
    method: 'post',
    data: {
      userId,
      items
    }
  })
}

/**
 * 获取用户订单列表
 * @returns {Promise} 订单列表
 */
export const getUserOrders = () => {
  const userId = JSON.parse(localStorage.getItem('userInfo'))?.userId
  return request({
    url: '/order/order/selectOrdersByUserId',
    method: 'post',
    data: { userId }
  })
}

/**
 * 用户取消订单
 * @param {number} orderId - 订单ID
 * @returns {Promise} 取消结果
 */
export const cancelOrder = (orderId) => {
  const userId = JSON.parse(localStorage.getItem('userInfo'))?.userId
  return request({
    url: '/order/order/cancelOrderByUser',
    method: 'post',
    data: {
      orderId,
      userId
    }
  })
}

/**
 * 更新订单状态
 * @param {number} orderId - 订单ID
 * @param {string} status - 订单状态
 * @returns {Promise} 更新结果
 */
export const updateOrderStatus = (orderId, status) => {
  return request({
    url: '/order/order/updateOrderStatus',
    method: 'post',
    data: {
      orderId,
      status
    }
  })
}

/**
 * 完成订单
 * @param {number} orderId - 订单ID
 * @returns {Promise} 完成结果
 */
export const completeOrder = (orderId) => {
  return request({
    url: '/order/order/completeOrder',
    method: 'post',
    data: {
      orderId
    }
  })
}

/**
 * 创建支付订单
 * @param {number} orderId - 订单ID
 * @param {number} amount - 支付金额
 * @returns {Promise} 支付结果
 */
export const createPayment = (orderId, amount) => {
  return request({
    url: '/pay/payments/createPayment',
    method: 'post',
    data: {
      orderId,
      amount,
      paymentMethod: '支付宝'
    }
  })
}

/**
 * 个人信息相关接口
 */

/**
 * 更新居民信息
 * @param {Object} data - 更新的信息
 * @returns {Promise} 更新结果
 */
export const updateResidentInfo = (data) => {
  return request({
    url: '/user/user/update',
    method: 'post',
    headers: {
      'Content-Type': 'application/json'
    },
    data
  })
}

/**
 * 更新密码
 * @param {Object} data - 密码信息
 * @param {string} data.username - 用户名
 * @param {string} data.email - 邮箱
 * @param {string} data.newPassword - 新密码
 * @returns {Promise} 更新结果
 */
export const updatePassword = (data) => {
  return request({
    url: '/user/user/forget',
    method: 'post',
    headers: {
      'Content-Type': 'application/json'
    },
    data: {
      username: data.username,
      email: data.email,
      newPasswordHash: data.newPassword
    }
  })
}

/**
 * 物业报修相关接口
 */

/**
 * 提交报修请求
 * @param {Object} data - 报修信息
 * @returns {Promise} 提交结果
 */
export const submitRepairRequest = (data) => {
  return request({
    url: '/property/repair-requests/save',
    method: 'post',
    data
  })
}

/**
 * 获取用户报修记录
 * @returns {Promise} 报修记录列表
 */
export const getUserRepairRequests = () => {
  const userId = JSON.parse(localStorage.getItem('userInfo'))?.userId
  return request({
    url: '/property/repair-requests/selectResident',
    method: 'post',
    data: { userId }
  })
}

/**
 * 物业缴费相关接口
 */

/**
 * 根据居民ID和年份查询物业费
 * @param {number} periodStart - 开始年份
 * @param {number} periodEnd - 结束年份
 * @returns {Promise} 物业费列表
 */
export const selectResidentPropertyFees = (periodStart, periodEnd) => {
  const userId = JSON.parse(localStorage.getItem('userInfo'))?.userId
  return request({
    url: '/property/property-fees/selectResident',
    method: 'post',
    data: {
      userId,
      periodStart,
      periodEnd
    }
  })
}

/**
 * 创建支付订单
 * @param {number} orderId - 订单ID
 * @param {number} amount - 支付金额
 * @returns {Promise} 支付结果
 */
export const createPayment1 = (feeId, amount) => {
  return request({
    url: '/pay/payments/createPayment',
    method: 'post',
    data: {
      feeId,
      amount,
      paymentMethod: '支付宝'
    }
  })
}

/**
 * 访客登记相关接口
 */

/**
 * 登记访客
 * @param {Object} data - 访客登记信息
 * @param {Object} data.visitor - 访客信息
 * @param {string} data.visitor.name - 访客姓名
 * @param {string} data.visitor.phoneNumber - 访客电话号码
 * @param {string} data.visitor.purpose - 访客来访目的
 * @param {string} data.residentNameOrPhone - 住户姓名或电话号码
 * @returns {Promise} 登记结果
 */
export const registerVisitor = (data) => {
  console.log('发送访客登记请求:', data)
  return request({
    url: '/user/user/visitor/register?residentNameOrPhone',
    method: 'post',
    data
  }).then(response => response)
}

/**
 * 根据手机号码查询访客记录
 * @param {Object} data - 查询参数
 * @param {string} data.phoneNumber - 访客手机号码
 * @returns {Promise} 访客记录查询结果
 */
export const queryVisitorByPhone = (data) => {
  console.log('发送访客手机号查询请求:', data)
  return request({
    url: '/user/user/visitor/query-by-phone',
    method: 'post',
    data
  }).then(response => {
    if (response.code === 200) {
      // 确保返回的数据是数组格式
      response.data = response.data || []
      if (!Array.isArray(response.data)) {
        response.data = [response.data]
      }
    }
    return response
  })
}

/**
 * 查看访客记录
 * @param {Object} data - 查询信息
 * @param {number} data.userId - 用户ID
 * @returns {Promise} 访客记录查询结果
 */
export const getVisitorRecords = (data) => {
  console.log('发送查看访客记录请求:', data)
  return request({
    url: '/user/user/visitor/by-user',
    method: 'post',
    data
  }).then(response => response)
}


/**
 * 车位预约相关接口
 */

/**
 * 查询所有车位
 * @returns {Promise} 车位列表
 */
export const selectParking = () => {
  return request({
    url: '/parking/parking/selectParking',
    method: 'post'
  })
}

/**
 * 查询可用车位
 * @returns {Promise} 可用车位列表
 */
export const selectParkingByStatus = () => {
  return request({
    url: '/parking/parking/selectParkingByStatus',
    method: 'post'
  })
}

/**
 * 查看车位详情
 * @param {Object} data - 查询信息
 * @param {number} data.spotId - 车位ID
 * @returns {Promise} 车位详情
 */
export const selectParkingById = (data) => {
  return request({
    url: '/parking/parking/selectParkingById',
    method: 'post',
    data
  })
}

/**
 * 创建预约
 * @param {Object} data - 预约信息
 * @param {number} data.spotId - 车位ID
 * @param {number} data.userId - 用户ID
 * @param {string} data.startTime - 开始时间（格式: YYYY-MM-DDTHH:mm:ss）
 * @param {string} data.endTime - 结束时间（格式: YYYY-MM-DDTHH:mm:ss）
 * @returns {Promise} 创建结果，返回包含 code 的对象
 */
export const createReservation = (data) => {
  return request({
    url: '/parking/parking/createReser', // 调整为实际接口路径
    method: 'post',
    data: {
      spotId: data.spotId,
      userId: data.userId,
      startTime: data.startTime,
      endTime: data.endTime
    }
  }).then(response => {
    // 检查响应是否包含 code 属性
    if (typeof response.code === 'undefined') {
      throw new Error('后端响应格式错误，未返回 code');
    }
    return response; // 返回完整响应对象，包含 code, message, data
  });
};

/**
 * 取消预约
 * @param {Object} data - 取消预约所需信息
 * @param {number} data.reservationId - 预约ID
 * @param {number} data.spotId - 车位ID
 * @returns {Promise} 取消结果
 */
export const cancelReservation = (data) => {
  return request({
    url: '/parking/parking/cancelReser', // 调整为实际接口路径
    method: 'post',
    data: {
      reservationId: data.reservationId,
      spotId: data.spotId
    }
  }).then(response => {
    if (typeof response.code === 'undefined') {
      throw new Error('后端响应格式错误，未返回 code');
    }
    return response; // 返回完整响应对象，包含 code, message, data
  });
};

/**
 * 查询个人预约信息
 * @param {Object} data - 查询信息
 * @param {number} data.userId - 用户ID
 * @returns {Promise} 个人预约信息
 */
export const selectReservationByUserId = (data) => {
  return request({
    url: '/parking/parking/selectReserByUserId',
    method: 'post',
    data
  }).then(response => {
    if (response.code === 200) {
      response.data = response.data || []
      if (!Array.isArray(response.data)) {
        response.data = [response.data]
      }
    }
    return response
  })
}